///**
// * All rights Reserved, Designed By 林溪
// * Copyright:    Copyright(C) 2016-2020
// */
//
//package cn.lysoy.demo.xaDatasourceTest;
//
//import com.mysql.cj.jdbc.MysqlXADataSource;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.ibatis.session.SqlSessionFactory;
//import org.mybatis.spring.SqlSessionFactoryBean;
//import org.mybatis.spring.SqlSessionTemplate;
//import org.springframework.beans.factory.annotation.Qualifier;
//import org.springframework.boot.jta.atomikos.AtomikosDataSourceBean;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Primary;
//
//import javax.sql.DataSource;
//
///**
// * 第一数据源配置
// * @author：林溪
// * @date：2020年11月19日
// */
//@Configuration
//@Slf4j
//public class MysqlXaDatasourceConfig {
//    /**
//     * @return DataSource
//     */
//    @Bean("master-datasource")
//    @Primary
//    public DataSource masterDataSource() {
//        final MysqlXADataSource mysqlXaDataSource = new MysqlXADataSource();
//        mysqlXaDataSource.setUrl("jdbc:mysql:///log?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&allowPublicKeyRetrieval=true&useServerPrepStmts=true&cachePrepStmts=true");
//        mysqlXaDataSource.setPassword("123456");
//        mysqlXaDataSource.setUser("root");
//        final AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean();
//        xaDataSource.setXaDataSource(mysqlXaDataSource);
//        xaDataSource.setUniqueResourceName("master-datasource");
//        xaDataSource.setPoolSize(2);
//        xaDataSource.setMinPoolSize(2);
//        xaDataSource.setMaxPoolSize(4);
//        xaDataSource.setConcurrentConnectionValidation(true);
//        xaDataSource.setTestQuery("select 1 from dual");
//        log.info("初始化主数据库成功");
//        return xaDataSource;
//    }
//
//
//    @Bean(name = "masterSqlSessionFactory")
//    @Primary
//    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("master-datasource") DataSource dataSource) throws Exception {
//        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
//        bean.setDataSource(dataSource);
//        return bean.getObject();
//    }
//
//
//    @Bean(name = "masterSqlSessionTemplate")
//    @Primary
//    public SqlSessionTemplate masterSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
//        return new SqlSessionTemplate(sqlSessionFactory);
//    }
//
//    /**
//     * @return DataSource
//     */
//    @Bean("slave-datasource")
//    public DataSource slaveDataSource() {
//        final MysqlXADataSource mysqlXaDataSource = new MysqlXADataSource();
//        mysqlXaDataSource.setUrl("jdbc:mysql:///log2?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&allowPublicKeyRetrieval=true&useServerPrepStmts=true&cachePrepStmts=true");
//        mysqlXaDataSource.setPassword("123456");
//        mysqlXaDataSource.setUser("root");
//        final AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean();
//        xaDataSource.setXaDataSource(mysqlXaDataSource);
//        xaDataSource.setUniqueResourceName("slave-datasource");
//        xaDataSource.setPoolSize(1);
//        xaDataSource.setMinPoolSize(1);
//        xaDataSource.setMaxPoolSize(1);
//        xaDataSource.setConcurrentConnectionValidation(true);
//        xaDataSource.setTestQuery("select 1 from dual");
//        log.info("初始化从数据库成功");
//        return xaDataSource;
//    }
//
//    @Bean(name = "slaveSqlSessionFactory")
//    public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("slave-datasource") DataSource dataSource) throws Exception {
//        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
//        bean.setDataSource(dataSource);
//        return bean.getObject();
//    }
//
//
//    @Bean(name = "slaveSqlSessionTemplate")
//    public SqlSessionTemplate slaveSqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
//        return new SqlSessionTemplate(sqlSessionFactory);
//    }
//}
